Add #define BABL_ALPHA_THRESHOLD which is the alpha threshold used in the
authorMartin Nordholts <martinn@src.gnome.org>
Sun, 16 Nov 2008 12:36:50 +0000 (12:36 +0000)
committerMartin Nordholts <martinn@src.gnome.org>
Sun, 16 Nov 2008 12:36:50 +0000 (12:36 +0000)
* babl/babl.h: Add #define BABL_ALPHA_THRESHOLD which is the alpha
threshold used in the reference implementation for
un-pre-multiplication of color data.

* babl/base/model-rgb.c
* babl/base/model-gray.c
* extensions/gegl-fixups.c: Use the define, a consistent alpha
threshold improves accurucy of conversions.

svn path=/trunk/; revision=356

ChangeLog
babl/babl.h
babl/base/model-gray.c
babl/base/model-rgb.c
extensions/gegl-fixups.c

index 4592d97b022cb9ac45fe9bd22bedc85bb8fd2e2f..6a5c6f5f4c4cc45d91c48e08fbf5693a8c3bf040 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2008-11-16  Martin Nordholts  <martinn@svn.gnome.org>
+
+       * babl/babl.h: Add #define BABL_ALPHA_THRESHOLD which is the alpha
+       threshold used in the reference implementation for
+       un-pre-multiplication of color data.
+
+       * babl/base/model-rgb.c
+       * babl/base/model-gray.c
+       * extensions/gegl-fixups.c: Use the define, a consistent alpha
+       threshold improves accurucy of conversions.
+
 2008-11-16  Martin Nordholts  <martinn@svn.gnome.org>
 
        * extensions/gegl-fixups.c (conv_rgbAF_sdl32)
index 019f96a051cc37029a675478b2877efb4b1b57a8..71d94c3dbcd3eb97ffbc056a37699b55c06a4259 100644 (file)
@@ -45,6 +45,11 @@ typedef struct _BablList BablList;
  */
 #define BABL_MAGIC   0xbAb100
 
+/* Alpha threshold used in the reference implementation for
+ * un-pre-multiplication of color data.
+ */
+#define BABL_ALPHA_THRESHOLD 0.0001
+
 enum {
   BABL_INSTANCE = BABL_MAGIC,
   BABL_TYPE,
index b7004d4e08dc56acb985b983d5dc57ae70a12143..13031a029e7df251b979ee679aee57e62e285ab6 100644 (file)
@@ -308,7 +308,7 @@ gray_alpha_premultiplied_to_rgba (int    src_bands,
       double luminance = *(double *) src[0];
       double alpha     = *(double *) src[1];
 
-      if (alpha > 0.00001)
+      if (alpha > BABL_ALPHA_THRESHOLD)
         {
           luminance = luminance / alpha;
         }
@@ -408,7 +408,7 @@ premultiplied_to_non_premultiplied (int    src_bands,
       alpha = *(double *) src[src_bands - 1];
       for (band = 0; band < src_bands - 1; band++)
         {
-          if (alpha > 0.001)
+          if (alpha > BABL_ALPHA_THRESHOLD)
             {
               *(double *) dst[band] = *(double *) src[band] / alpha;
             }
index a1c1c37bd22de0f6aafb3cdec169a5d8bad38829..dd8d93efaa4068eadbac941f2bbfd6bc40620455 100644 (file)
@@ -283,7 +283,7 @@ premultiplied_to_non_premultiplied (int    src_bands,
       alpha = *(double *) src[src_bands - 1];
       for (band = 0; band < src_bands - 1; band++)
         {
-          if (alpha > 0.001)
+          if (alpha > BABL_ALPHA_THRESHOLD)
             {
               *(double *) dst[band] = *(double *) src[band] / alpha;
             }
@@ -332,7 +332,7 @@ rgba_gamma_2_2_premultiplied2rgba (char *src,
   while (n--)
     {
       double alpha = ((double *) src)[3];
-      if (alpha > 0.0001)
+      if (alpha > BABL_ALPHA_THRESHOLD)
         {
           ((double *) dst)[0] = gamma_2_2_to_linear (((double *) src)[0] / alpha);
           ((double *) dst)[1] = gamma_2_2_to_linear (((double *) src)[1] / alpha);
index 9bc6b8b3656790cde2121706d68d5bda7327ae4b..48d5f097f8da7b1c5ca4614bd8a52d4b864312dd 100644 (file)
@@ -337,7 +337,7 @@ conv_rgbAF_sdl32 (unsigned char *srcc,
         {
           float ca = src[i];
           int   ret;
-          if (alpha < 0.0001)
+          if (alpha < BABL_ALPHA_THRESHOLD)
             ret = 0;
           else
             ret = table_F_8g[gggl_float_to_index16 (ca / alpha)];
@@ -393,7 +393,7 @@ conv_rgbAF_rgb8 (unsigned char *srcc,
   while (n--)
     {
       float alpha = src[3];
-      if (alpha < 0.00001)
+      if (alpha < BABL_ALPHA_THRESHOLD)
         {
           dst[0] = 0;
           dst[1] = 0;
@@ -471,7 +471,7 @@ conv_rgbAF_rgbaF (unsigned char *srcc,
     {
       float alpha = src[3];
       float recip = 1.0/alpha;
-      if (alpha < 0.00001)
+      if (alpha < BABL_ALPHA_THRESHOLD)
         recip = 0.0;
       dst[0] = src[0] * recip;
       dst[1] = src[1] * recip;
@@ -498,7 +498,7 @@ conv_rgbAF_lrgba8 (unsigned char *srcc,
     {
       float alpha = src[3];
       float recip = (1.0/alpha);
-      if (alpha < 0.00001)
+      if (alpha < BABL_ALPHA_THRESHOLD)
         {
           dst[0] = dst[1] = dst[2] = dst[3] = 0;
         }